package com.huluobo.jetpackdemo.paging

import android.util.Log
import androidx.paging.PagingSource
import androidx.paging.PagingState

/**
 *  Created by LC on 2024/12/12.
 */
class RepoPagingSource(val apiService: ApiService) : PagingSource<Int, Item>() {
    override fun getRefreshKey(state: PagingState<Int, Item>): Int? {
        return null
    }

    var sum = 0
    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Item> {
        return try {
            //网络请求返回数据源
            val page = params.key ?: 1 //当前的页码,如果为空就默认为1,如果不为空就是当前的页码,比如1,2,3...
            val pageSize = params.loadSize //当前的数据源size的大小,也就是pageSize
            val repoResponse = apiService.getPagingData(page, pageSize) //发起网络请求,产生数据返回,当前是整体的数据,包含了最外层
            val items = repoResponse.items//请求拿到返回的数据源

            sum += items.size
            Log.i("TagA", "sum:$sum")

            val preKey = if (page > 1) page - 1 else null //向前翻页的key,必须大于1,才能向前翻页
            val nextKey = if (items.isNotEmpty()) page + 1 else null//向后翻页的key,需要判断返回的数据源是否为空,为空则代表已经没有更多数据了
            LoadResult.Page(items, preKey, nextKey)//相当于success,请求成功赋值
        } catch (e: Exception) {
            //相当于failed,请求失败,保存错误信息
            LoadResult.Error(e)
        }
    }
}